From 46f90ba5abd9e24c1ecfd39b52b92f28187fc234 Mon Sep 17 00:00:00 2001 From: Yehuda Katz + Carl Lerche Date: Tue, 8 Jul 2014 16:28:12 -0700 Subject: [PATCH] Fix registry query fn --- src/cargo/core/dependency.rs | 13 +++++++++++-- src/cargo/core/registry.rs | 13 ++++++++++--- src/cargo/core/resolver.rs | 2 +- src/cargo/core/summary.rs | 7 ++++++- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/cargo/core/dependency.rs b/src/cargo/core/dependency.rs index a96e89561..2c5dd0632 100644 --- a/src/cargo/core/dependency.rs +++ b/src/cargo/core/dependency.rs @@ -1,4 +1,4 @@ -use core::{VersionReq,SourceId}; +use core::{VersionReq,SourceId,Summary}; use util::CargoResult; #[deriving(PartialEq,Clone,Show)] @@ -45,7 +45,16 @@ impl Dependency { } pub fn is_transitive(&self) -> bool { - self.transitive + self.transitive + } + + pub fn matches(&self, sum: &Summary) -> bool { + debug!("self={}; summary={}", self, sum); + debug!(" a={}; b={}", self.namespace, sum.get_source_id()); + + self.name.as_slice() == sum.get_name() && + self.req.matches(sum.get_version()) && + &self.namespace == sum.get_source_id() } } diff --git a/src/cargo/core/registry.rs b/src/cargo/core/registry.rs index 6a2d6feff..83cb1c759 100644 --- a/src/cargo/core/registry.rs +++ b/src/cargo/core/registry.rs @@ -7,9 +7,9 @@ pub trait Registry { } impl Registry for Vec { - fn query(&mut self, name: &Dependency) -> CargoResult> { + fn query(&mut self, dep: &Dependency) -> CargoResult> { Ok(self.iter() - .filter(|summary| name.get_name() == summary.get_name()) + .filter(|summary| dep.matches(*summary)) .map(|summary| summary.clone()) .collect()) } @@ -105,6 +105,13 @@ impl<'a> PackageRegistry<'a> { Ok(()) }).chain_error(|| human(format!("Unable to update {}", namespace))) } + + fn query_overrides(&self, dep: &Dependency) -> Vec { + self.overrides.iter() + .filter(|s| s.get_name() == dep.get_name()) + .map(|s| s.clone()) + .collect() + } } fn dedup(ids: Vec) -> Vec { @@ -120,7 +127,7 @@ fn dedup(ids: Vec) -> Vec { impl<'a> Registry for PackageRegistry<'a> { fn query(&mut self, dep: &Dependency) -> CargoResult> { - let overrides = try!(self.overrides.query(dep)); // this can never fail in practice + let overrides = self.query_overrides(dep); if overrides.is_empty() { // Ensure the requested namespace is loaded diff --git a/src/cargo/core/resolver.rs b/src/cargo/core/resolver.rs index 968fec3dc..6a50c7108 100644 --- a/src/cargo/core/resolver.rs +++ b/src/cargo/core/resolver.rs @@ -97,7 +97,7 @@ mod test { ) fn registry_loc() -> SourceId { - let remote = Location::parse("http://www.example.com/").unwrap(); + let remote = Location::parse("http://example.com").unwrap(); SourceId::new(RegistryKind, remote) } diff --git a/src/cargo/core/summary.rs b/src/cargo/core/summary.rs index 5d86a3e8d..fcad56a2f 100644 --- a/src/cargo/core/summary.rs +++ b/src/cargo/core/summary.rs @@ -1,7 +1,8 @@ use semver::Version; use core::{ Dependency, - PackageId + PackageId, + SourceId }; /// Summaries are cloned, and should not be mutated after creation @@ -31,6 +32,10 @@ impl Summary { self.get_package_id().get_version() } + pub fn get_source_id<'a>(&'a self) -> &'a SourceId { + self.package_id.get_source_id() + } + pub fn get_dependencies<'a>(&'a self) -> &'a [Dependency] { self.dependencies.as_slice() } -- 2.30.2